package com.yiruantong.system.domain.core.vo;

import com.yiruantong.system.domain.core.SysMenu;
import com.yiruantong.system.domain.tenant.SysTenantMenu;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMappers;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 菜单权限视图对象 sys_menu
 *
 * @author YiRuanTong
 */
@Data
@AutoMappers({
  @AutoMapper(target = SysMenu.class),
  @AutoMapper(target = SysTenantMenu.class)
})
public class SysMenuVo implements Serializable {

  @Serial
  private static final long serialVersionUID = 1L;

  /**
   * 菜单ID
   */
  private Long menuId;

  /**
   * 菜单名称
   */
  private String menuName;

  /**
   * 父菜单ID
   */
  private Long parentId;

  /**
   * 显示顺序
   */
  private Integer orderNum;

  /**
   * 路由地址
   */
  private String path;

  /**
   * 组件路径
   */
  private String component;

  /**
   * 组件名称
   */
  private String componentName;

  /**
   * 路由参数
   */
  private String queryParam;

  /**
   * 是否为外链（0是 1否）
   */
  private Byte isFrame;

  /**
   * 是否缓存（0缓存 1不缓存）
   */
  private Byte isCache;

  /**
   * 菜单类型（M目录 C菜单 F按钮）
   */
  private String menuType;

  /**
   * 显示状态（0显示 1隐藏）
   */
  private Byte visible;

  /**
   * 菜单状态（0正常 1停用）
   */
  private Byte enable;

  /**
   * 权限标识
   */
  private String perms;

  /**
   * 菜单图标
   */
  private String icon;

  /**
   * 创建部门
   */
  private Long createDept;

  /**
   * 备注
   */
  private String remark;

  /**
   * 创建时间
   */
  private Date createTime;

  /**
   * 焦点菜单
   */
  private String activeMenu;

  /**
   * 外部url
   */
  private String isLink;

  /**
   * 动态路由
   */
  private String dynamicPath;

  /**
   * 动态路由
   */
  private BigDecimal subMenuWidth;

  /**
   * 子菜单
   */
  private List<SysMenuVo> children = new ArrayList<>();
  /**
   * 扩展字段
   */
  private Map<String, Object> expandFields;
}
